--[[
  class: Game.Monster

  Monster entity class.

  Inherit from <Game.Entity> base class::
]]


--[[
  int: type

  The monster type / prop index.

  Data Type: int / <Game.MONSTERTYPE>::
  Access: Read-Only::
]]
Game.Monster.type


--[[
  number: damage

  The base attack damage.

  Data Type: number::
  Access: Read-Write::
]]
Game.Monster.damage


--[[
  number: speed

  The movement speed multiplier.

  Data Type: number::
  Access: Read-Write::

  Notes:
    - Higher means faster.
]]
Game.Monster.speed


--[[
  number: viewDistance

  The distance (in block units) that the monster can see.

  Data Type: number::
  Access: Read-Write::
]]
Game.Monster.viewDistance


--[[
  int: coin

  The coin reward amount given to this monster killer.

  Data Type: int::
  Access: Read-Write::
]]
Game.Monster.coin


--[[
  bool: applyKnockback

  Enable/Disable the hit knockback to this monster.

  Data Type: bool::
  Access: Read-Write::

  Options:
    true  - Enabled.
    false - Disabled.
]]
Game.Monster.applyKnockback


--[[
  bool: canJump

  Enable/Disable the ability to jump.

  Data Type: bool::
  Access: Read-Write::

  Options:
    true  - Enabled.
    false - Disabled.
]]
Game.Monster.canJump


--[[
  number: checkAngle

  The field of view (FoV) of this monster.

  Data Type: number::
  Access: Read-Write::

  Warnings:
    - [BUG] Marked as boolean type, can't be used, no workaround yet.
]]
Game.Monster.checkAngle


--[[
  method: Create

  Create & spawn the monster entity at given position.

  Access: Read-Only::

  Warnings:
    - May spawn at nearby position (XY axis) if given spawn position is blocked.

  Parameters:
    type     - (*int / <Game.MONSTERTYPE>*) The given monster type / prop index.
    position - (*table / <~Virtual Table.vector3D>*) The spawn position.

  Returns:
    (*<Game.Monster> / nil*) The weapon entity instance (nil = Invalid type and/or position).
]]
function Game.Monster.Create (type, position)


--[[
  method: AttackPlayer

  Order this monster to attack at given player index.

  Access: Read-Only::

  Parameters:
    playerIndex - (*int*) The player index.
]]
function Game.Monster:AttackPlayer (playerIndex)


--[[
  method: AttackTo

  Order this monster to move at given position
  and allows to attack nearby visible enemies
  while moving.

  Access: Read-Only::

  Parameters:
    position - (*table / <~Virtual Table.vector3D>*) Destination position.
]]
function Game.Monster:AttackTo (position)


--[[
  method: MoveTo

  Order this monster to move at given position
  and ignores any enemies while moving.

  Access: Read-Only::

  Parameters:
    position - (*table / <~Virtual Table.vector3D>*) Destination position.
]]
function Game.Monster:MoveTo (position)


--[[
  method: Hold

  Order this monster to stop at current position.

  Access: Read-Only::

  Notes:
    - Incomplete documentation in official website.

  Parameters:
    holdPosition - (*bool*) Input value (true = Disallow to move again)(false = Allow to move again).
]]
function Game.Monster:Hold (holdPosition)


--[[
  method: Stop

  Order this monster to stop and hold at current position.

  Access: Read-Only::

  Notes:
    - Incomplete documentation in official website.

  Parameters:
    holdAttack - (*bool*) Input value (true = Disallow to attack anyone)(false = Allow to attack anyone).
]]
function Game.Monster:Stop (holdAttack)

